//
//  Node.h
//  抽象二叉树
//
//  Created by chenyh on 2021/1/27.
//

#ifndef Node_h
#define Node_h

#include <stdio.h>

typedef struct _Node Node;
typedef double(*node_calc_t)(Node *pThis);
typedef void(*node_cleanup_t)( Node *pThis);

typedef struct _Node{
    node_calc_t    node_calc;
    node_cleanup_t node_cleanup;
}Node;

typedef struct _NumNode{
    Node isa;
    double _num;
}NumNode;

typedef struct _BinNode{
    Node isa;
    Node *p_Left;
    Node *p_Right;
}BinNode;

typedef struct _AddNode{
    BinNode isa;
}AddNode;
typedef struct _MultNode{
    BinNode isa;
}MultNode;

NumNode *newNumNode(double num);
double node_calc(Node *pThis);
AddNode * newAddNode(Node *pLeft,Node *pRight);
MultNode * newMultNode(Node *pLeft,Node *pRight);
void node_cleanup(Node *pThis);

#endif /* Node_h */
